資料驗證(Validation)
回呼(Callback)
資料驗證(Validation)
開發網站應⽤程式,資料的正確性是很重要的。⼤家應該都不會想被有意或無意的
在資料庫裡塞了奇怪的資料,所以通常都會加上資料驗證的機制,確保寫入的資料
是符合規定的。
驗證該在哪裡做?
那,這個資料驗證機制該寫在哪裡比較好呢?常⾒的選項有:
class Article < ApplicationRecord
validates :title, presence: true
end
中間那⾏ validates ⽅法的意思是「title 這個欄位為必填欄位」,讓我們開
rails console 起來試⼀下:
$ bin/rails console
>> a1 = Article.new
=> #<Article id: nil, title: nil, content: nil, is_online: nil, c
reated_at: nil, updated_at: nil, photo: nil, user_id: nil>
先⽤ new ⽅法建立⼀個 Article 物件,然後⽤ errors ⽅法看⼀下這個物件有沒
有什麼狀況:
>> a1.errors.any?
=> false
這時候看起來沒什麼問題。接著試著呼叫 save ⽅法把這顆物件存入資料表:
>> a1.save
(0.2ms) begin transaction
(0.1ms) rollback transaction
=> false
發現 save ⽅法失敗了,並且回傳 false,來看看到底是哪邊有問題:
>> a1.errors.any?
=> true
原本沒問題的,在 save 之後變得有問題了。來看看錯誤訊息是什麼:
>> a1.errors.full_messages
=> ["Title can't be blank"]
除了 validates :title, presence: true 之外,還有另⼀種寫法:
class Article < ActiveRecord::Base
validates_presence_of :title
end
效果也是⼀樣的。
除了 presence 之外,Rails 還有提供其它像是 uniqueness 、 length 或
numericality 等便利的驗證器,使⽤⽅法可直接參考 Rails Guide 的 Validations
章節。
[為你自己學Ruby on Rails]https://railsbook.tw/chapters/08-ruby-basic-4.html